package com.eqdd.yiqidian.box.Tokenizer;

import android.graphics.Color;
import android.text.Editable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.widget.MultiAutoCompleteTextView;

import com.eqdd.yiqidian.box.span.CircleSpan;

/**
 * @author吕志豪 .
 * @date 17-12-7  上午8:54.
 * Github :https://github.com/lvzhihao100
 * E-Mail：1030753080@qq.com
 * 简书 :http://www.jianshu.com/u/6e525b929aac
 */

public class MeiTokenizer implements MultiAutoCompleteTextView.Tokenizer {
    // 用于查找当前光标位置之前的分隔符的位置并返回，向前查询
    // text - 用户已经输入的文本内容
    // cursor - 当前光标的位置，在文本内容后面
    public int findTokenStart(CharSequence text, int cursor) {
//        int i = cursor;
        CircleSpan[] spans = ((Editable) text).getSpans(0, text.length() - 1, CircleSpan.class);

        int num = 0;
        for (CircleSpan span : spans) {
            num += span.length();
        }
        return num;

//
//
//        // 查找当前光标的前一个位置非','的字符位置
//        while (i > 0 && text.charAt(i - 1) != ',') {
//            i--;
//        }
//        // 查找','后面非空格的字符位置
//        while (i < cursor && text.charAt(i) == ' ') {
//            i++;
//        }

//        return text.length();   // 返回一个要加分隔符的字符串的开始位置
    }

    // 用于查找当前光标位置之后的分隔符的位置并返回，向后查询
    // text - 用户已经输入的文本内容
    // cursor - 当前光标的位置，在文本内容之间
    public int findTokenEnd(CharSequence text, int cursor) {
//        int i = cursor;
//        int len = text.length();
//
//        // 向后查找','字符，若找到则直接返回其所在位置
//        while (i < len) {
//            if (text.charAt(i) == ',') {
//                return i;
//            } else {
//                i++;
//            }
//        }

        return text.length();
    }

    // 用于返回提示信息加上分隔符后的文本内容
    // text - 提示信息中的文本内容
    public CharSequence terminateToken(CharSequence text) {

        // 创建一个新的SpannableString，传进来的text会被退化成String
        // 导致sp中丢失掉了text中的样式配置
//        SpannableString sp = new SpannableString(text);
////                sp.setSpan(new CircleSpan(Color.GREEN, 40)
////                        , 0, text.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//        // 故需要借助TextUtils.copySpansFrom从text中复制原来的样式到新的sp中，
//        // 以保持原先样式不变情况下添加一个逗号和空格
//        TextUtils.copySpansFrom((Spanned) text, 0, text.length(),
//                Object.class, sp, 0);
        return text;

//        int i = text.length();
//
//        // 去掉原始匹配的数据的末尾空格
//        while (i > 0 && text.charAt(i - 1) == ' ') {
//            i--;
//        }
//
//        // // 判断原始匹配的数据去掉末尾空格后是否含有逗号，有则立即返回
//        if (i > 0 && text.charAt(i - 1) == ',') {
////            return text;
//            SpannableString sp = new SpannableString(text);
//            sp.setSpan(new CircleSpan(Color.GREEN, 40)
//                    , 0, text.length() - 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//            return sp;
//        } else {
//            // CharSequence类型的数据有可能是富文本SpannableString类型
//            // 故需要进行判断
//            if (text instanceof Spanned) {
//                // 创建一个新的SpannableString，传进来的text会被退化成String
//                // 导致sp中丢失掉了text中的样式配置
//                SpannableString sp = new SpannableString(text + ",");
////                sp.setSpan(new CircleSpan(Color.GREEN, 40)
////                        , 0, text.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//                // 故需要借助TextUtils.copySpansFrom从text中复制原来的样式到新的sp中，
//                // 以保持原先样式不变情况下添加一个逗号和空格
//                TextUtils.copySpansFrom((Spanned) text, 0, text.length(),
//                        Object.class, sp, 0);
//                return sp;
//            } else {        // text为纯文本，直接加上逗号和空格
////                return text + ", ";
//                SpannableString sp = new SpannableString(text + ",");
//                sp.setSpan(new CircleSpan(Color.GREEN, 40)
//                        , 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//                return sp;
//            }
//        }
    }

}
